//package cn.bugstack.xfg.dev.tech.test;
//
//import com.alibaba.fastjson.JSON;
//import jakarta.annotation.Resource;
//import lombok.extern.slf4j.Slf4j;
//import org.junit.Test;
//import org.junit.runner.RunWith;
//import org.springframework.ai.chat.ChatResponse;
//import org.springframework.ai.chat.messages.Message;
//import org.springframework.ai.chat.messages.UserMessage;
//import org.springframework.ai.chat.prompt.Prompt;
//import org.springframework.ai.chat.prompt.SystemPromptTemplate;
//import org.springframework.ai.document.Document;
//import org.springframework.ai.ollama.OllamaChatClient;
//import org.springframework.ai.ollama.api.OllamaOptions;
//import org.springframework.ai.reader.tika.TikaDocumentReader;
//import org.springframework.ai.transformer.splitter.TokenTextSplitter;
//import org.springframework.ai.vectorstore.PgVectorStore;
//import org.springframework.ai.vectorstore.SearchRequest;
//import org.springframework.ai.vectorstore.SimpleVectorStore;
//import org.springframework.boot.test.context.SpringBootTest;
//import org.springframework.test.context.junit4.SpringRunner;
//
//import java.util.ArrayList;
//import java.util.List;
//import java.util.Map;
//import java.util.stream.Collectors;
//
//@Slf4j
//@RunWith(SpringRunner.class)
//@SpringBootTest
//public class RAGTest {
//
//    @Resource
//    private OllamaChatClient ollamaChatClient;
//    @Resource
//    private TokenTextSplitter tokenTextSplitter;
//    @Resource
//    private SimpleVectorStore simpleVectorStore;
//    @Resource
//    private PgVectorStore pgVectorStore;
//
//    @Test
//    public void upload() {
//        //读取本地资源文件，转换成 TikaDocumentReader
//        TikaDocumentReader reader = new TikaDocumentReader("./data/file.text");
//
//        List<Document> documents = reader.get();
//        //切割文件
//        List<Document> documentSplitterList = tokenTextSplitter.apply(documents);
//
//        //文件标记
//        documents.forEach(doc -> doc.getMetadata().put("knowledge", "知识库名称"));
//        documentSplitterList.forEach(doc -> doc.getMetadata().put("knowledge", "知识库名称"));
//
//
//        // simpleVectorStore.accept(documentSplitterList);调用 SimpleVectorStore 可以将知识库内容存储到程序内存中，不能持久化
//        // PgVectorStore 可以将数据内容存储到 向量库
//        pgVectorStore.accept(documentSplitterList);
//
//        log.info("上传完成");
//    }
//
//    @Test
//    public void chat() {
//        String message = "王大瓜，哪年出生";
//
//        String SYSTEM_PROMPT = """
//                Use the information from the DOCUMENTS section to provide accurate answers but act as if you knew this information innately.
//                If unsure, simply state that you don't know.
//                Another thing you need to note is that your reply must be in Chinese!
//                DOCUMENTS:
//                    {documents}
//                """;
//
//        SearchRequest request = SearchRequest.query(message).withTopK(5).withFilterExpression("knowledge == '知识库名称'");
//
//        List<Document> documents = pgVectorStore.similaritySearch(request);
//        String documentsCollectors = documents.stream().map(Document::getContent).collect(Collectors.joining());
//
//        Message ragMessage = new SystemPromptTemplate(SYSTEM_PROMPT).createMessage(Map.of("documents", documentsCollectors));
//
//        ArrayList<Message> messages = new ArrayList<>();
//        messages.add(new UserMessage(message));
//        messages.add(ragMessage);
//
//        ChatResponse chatResponse = ollamaChatClient.call(new Prompt(messages, OllamaOptions.create().withModel("deepseek-r1:1.5b")));
//
//        log.info("测试结果:{}", JSON.toJSONString(chatResponse));
//
//    }
//
//}
